-
Notifications
You must be signed in to change notification settings - Fork 15.2k
[libc++] Avoid overloaded operator,
for (T
, Iter
) cases
#161049
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
[libc++] Avoid overloaded operator,
for (T
, Iter
) cases
#161049
Conversation
@llvm/pr-subscribers-libcxx Author: A. Jiang (frederick-vs-ja) ChangesExisting deleted overloads in Fixes #160732. Full diff: https://github.com/llvm/llvm-project/pull/161049.diff 7 Files Affected:
diff --git a/libcxx/include/__random/piecewise_constant_distribution.h b/libcxx/include/__random/piecewise_constant_distribution.h
index c5bfa8dc3a4be..bd624fffd7f0e 100644
--- a/libcxx/include/__random/piecewise_constant_distribution.h
+++ b/libcxx/include/__random/piecewise_constant_distribution.h
@@ -190,7 +190,7 @@ piecewise_constant_distribution<_RealType>::param_type::param_type(
__areas_.assign(1, 0.0);
} else {
__densities_.reserve(__b_.size() - 1);
- for (size_t __i = 0; __i < __b_.size() - 1; ++__i, ++__f_w)
+ for (size_t __i = 0; __i < __b_.size() - 1; ++__i, (void)++__f_w)
__densities_.push_back(*__f_w);
__init();
}
diff --git a/libcxx/include/__random/piecewise_linear_distribution.h b/libcxx/include/__random/piecewise_linear_distribution.h
index a9906430c005c..1ceef77c8716b 100644
--- a/libcxx/include/__random/piecewise_linear_distribution.h
+++ b/libcxx/include/__random/piecewise_linear_distribution.h
@@ -194,7 +194,7 @@ piecewise_linear_distribution<_RealType>::param_type::param_type(
__areas_.assign(1, 0.0);
} else {
__densities_.reserve(__b_.size());
- for (size_t __i = 0; __i < __b_.size(); ++__i, ++__f_w)
+ for (size_t __i = 0; __i < __b_.size(); ++__i, (void)++__f_w)
__densities_.push_back(*__f_w);
__init();
}
diff --git a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/ctor_iterator.pass.cpp b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/ctor_iterator.pass.cpp
index ea6e807ca47b5..46decd7d974ee 100644
--- a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/ctor_iterator.pass.cpp
+++ b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/ctor_iterator.pass.cpp
@@ -21,15 +21,17 @@
#include <cassert>
#include <vector>
+#include "test_iterators.h"
#include "test_macros.h"
int main(int, char**)
{
{
typedef std::piecewise_constant_distribution<> D;
+ typedef cpp17_input_iterator<const double*> InIt;
double b[] = {10};
double p[] = {12};
- D d(b, b, p);
+ D d(InIt(b), InIt(b), InIt(p));
std::vector<double> iv = d.intervals();
assert(iv.size() == 2);
assert(iv[0] == 0);
diff --git a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/param_ctor_iterator.pass.cpp b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/param_ctor_iterator.pass.cpp
index baf6108b7e2e8..8cb42391925a7 100644
--- a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/param_ctor_iterator.pass.cpp
+++ b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/param_ctor_iterator.pass.cpp
@@ -20,6 +20,7 @@
#include <cassert>
#include <vector>
+#include "test_iterators.h"
#include "test_macros.h"
int main(int, char**)
@@ -27,9 +28,10 @@ int main(int, char**)
{
typedef std::piecewise_constant_distribution<> D;
typedef D::param_type P;
+ typedef cpp17_input_iterator<const double*> InIt;
double b[] = {10};
double p[] = {12};
- P pa(b, b, p);
+ P pa(InIt(b), InIt(b), InIt(p));
std::vector<double> iv = pa.intervals();
assert(iv.size() == 2);
assert(iv[0] == 0);
diff --git a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.plinear/ctor_iterator.pass.cpp b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.plinear/ctor_iterator.pass.cpp
index 24f7d4e18c36a..084538dfb5156 100644
--- a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.plinear/ctor_iterator.pass.cpp
+++ b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.plinear/ctor_iterator.pass.cpp
@@ -21,15 +21,17 @@
#include <cassert>
#include <vector>
+#include "test_iterators.h"
#include "test_macros.h"
int main(int, char**)
{
{
typedef std::piecewise_linear_distribution<> D;
+ typedef cpp17_input_iterator<const double*> InIt;
double b[] = {10};
double p[] = {12};
- D d(b, b, p);
+ D d(InIt(b), InIt(b), InIt(p));
std::vector<double> iv = d.intervals();
assert(iv.size() == 2);
assert(iv[0] == 0);
diff --git a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.plinear/param_ctor_iterator.pass.cpp b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.plinear/param_ctor_iterator.pass.cpp
index 04ded2a1c9706..42754456e0d6d 100644
--- a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.plinear/param_ctor_iterator.pass.cpp
+++ b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.plinear/param_ctor_iterator.pass.cpp
@@ -20,6 +20,7 @@
#include <cassert>
#include <vector>
+#include "test_iterators.h"
#include "test_macros.h"
int main(int, char**)
@@ -27,9 +28,10 @@ int main(int, char**)
{
typedef std::piecewise_linear_distribution<> D;
typedef D::param_type P;
+ typedef cpp17_input_iterator<const double*> InIt;
double b[] = {10};
double p[] = {12};
- P pa(b, b, p);
+ P pa(InIt(b), InIt(b), InIt(p));
std::vector<double> iv = pa.intervals();
assert(iv.size() == 2);
assert(iv[0] == 0);
diff --git a/libcxx/test/support/test_iterators.h b/libcxx/test/support/test_iterators.h
index 0335a4c561017..006b27c10b3f0 100644
--- a/libcxx/test/support/test_iterators.h
+++ b/libcxx/test/support/test_iterators.h
@@ -109,6 +109,9 @@ class cpp17_input_iterator
template <class T>
void operator,(T const &) = delete;
+
+ template <class T>
+ friend void operator,(const T&, const cpp17_input_iterator&) = delete;
};
#if TEST_STD_VER > 14
template <class It>
|
operator,
for piecewise_*_distribution
operator,
for (T
, Iter
) cases
921abbf
to
113870d
Compare
Several components in libc++ aren't defending against overloaded `operator,(T, Iter)` currently. Existing deleted overloads in `test_iterators.h` are insufficient for such cases. This PR adds corresponding deleted overloads with reversed order and fixes these libc++ components. - `piecewise_linear_distribution`'s iterator pair constructor, - `piecewise_linear_distribution::param_type`'s iterator pair constructor, - `piecewise_constant_distribution`'s iterator pair constructor, - `piecewise_constant_distribution::param_type`'s iterator pair constructor, - `money_get::do_get`, - `money_put::do_put`, and - `num_put::do_put`.
113870d
to
b7ad08c
Compare
Several components in libc++ aren't defending against overloaded
operator,(T, Iter)
currently. Existing deleted overloads intest_iterators.h
are insufficient for such cases.This PR adds corresponding deleted overloads with reversed order and fixes these libc++ components.
piecewise_linear_distribution
's iterator pair constructor,piecewise_linear_distribution::param_type
's iterator pair constructor,piecewise_constant_distribution
's iterator pair constructor,piecewise_constant_distribution::param_type
's iterator pair constructor,money_get::do_get
,money_put::do_put
, andnum_put::do_put
.Fixes #160732.